const fs = require('fs');

function readFile(fileName) {
    return new Promise((resolve, reject) => {
        //Promise 新建后就会立即执行。
        fs.readFile(fileName, (err, data) => {
            //建议在执行reject或resolve前添加return语句，不再执行接下来的语句
            if (err) return reject(err);
            console.log('resolve');
            resolve(data);
        });
    });
}

readFile(__dirname + '/1.txt')
    .then(data => {
        console.log(String(data));
        //then函数里返回另一个promise对象则可以进行链式调用
        return readFile(__dirname + '/2.txt');
    })
    .then(data => {
        console.log(String(data));
        return readFile(__dirname + '/3.txt');
    })
    .then(data => {
        console.log(String(data));
    })
    .catch(err => console.log(err));

const promise = new Promise(function(resolve, reject) {
    // 一旦执行resolve后在执行reject或者抛出异常都是无效的，
    // 因为Promise状态改变不可恢复
    resolve('ok');
    //Promise 新建后就会立即执行。;
    console.log('Execute immediately');
    throw new Error('test');
    setTimeout(function() {
        //reject(new Error('test'));
    }, 0);
});
promise
    .then(function(value) {
        console.log(value);
    })
    .catch(err => console.log('err', err));
